package com.itheima.thread.security.demo05;

import java.util.concurrent.locks.ReentrantLock;

public class SellTicket implements Runnable {

    // 记录要出售的总票数
    // 使用静态修饰的目的：让多个SellTicket对象去共享一个tickets
    private static int tickets = 100;

    // 定义一个锁对象
    private ReentrantLock reentrantLock  = new ReentrantLock() ;

    @Override
    public void run() {

        while(true) {                               // 票没有了，也可能有人来问，所以这里用死循环让卖票的动作一直执行

            // 加锁
            reentrantLock.lock();

                // 判断票数大于0，就卖票，并告知是哪个窗口卖的
                if(tickets > 0) {

                    // 模拟网络延迟
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票");

                    // 卖了票之后，总票数要减1
                    tickets-- ;
                }

            // 释放锁
            reentrantLock.unlock();

        }

    }

}
